home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1998 June / SGI Freeware 1998 June.iso / dist / fw_UMINNgopher.idb / usr / freeware / src / gopher_1.12 / gopherd / kernutils.c.z / kernutils.c
C/C++ Source or Header  |  1997-09-09  |  2KB  |  99 lines

  1. /********************************************************************
  2.  * $Author: drich $
  3.  * $Revision: 1.1 $
  4.  * $Date: 1995/10/03 04:08:37 $
  5.  * $Source: /proj/freeware1.0/gopher1.12/src/gopherd/RCS/kernutils.c,v $
  6.  * $State: Exp $
  7.  *
  8.  * Paul Lindner, University of Minnesota CIS.
  9.  *
  10.  * Copyright 1991, 1992 by the Regents of the University of Minnesota
  11.  * see the file "Copyright" in the distribution for conditions of use.
  12.  *********************************************************************
  13.  * MODULE: kernutils.c
  14.  * Routines to implement kernel specific stuff
  15.  *********************************************************************
  16.  * Revision History:
  17.  * $Log: kernutils.c,v $
  18.  * Revision 1.1  1995/10/03  04:08:37  drich
  19.  * gopher 1.2 check-in
  20.  *
  21.  * Revision 1.1  1992/12/21  20:46:12  lindner
  22.  * Initial revision
  23.  *
  24.  *
  25.  *********************************************************************/
  26.  
  27.  
  28. #include "gopherd.h"
  29.  
  30. #define LOADSYMBOL "_avenrun"    /* should work with most Unix flavors */
  31.  
  32. #define WHICHLOAD  2             /* 0 ==  1 min average           */
  33.                                  /* 1 ==  5 min average           */
  34.                                  /* 2 == 15 min average           */
  35.  
  36. #ifndef LOADRESTRICT
  37.  
  38. double maxload = 0;
  39.  
  40. int LoadTooHigh() 
  41. {
  42.   return(0);
  43. }
  44.  
  45. #else /* LOADRESTRICT */
  46.  
  47. int LoadTooHigh()
  48. {
  49.   int status;
  50.  
  51.   status = getload();
  52.   if(DEBUG)
  53.     printf("getload returns %d\n",status);
  54.   return(status);
  55.  
  56. }
  57.  
  58. #ifndef MAXLOAD
  59. #define MAXLOAD 10.0
  60. #endif
  61. double atof();
  62. double maxload = MAXLOAD;
  63. double sysload = 0.0;
  64. #include <nlist.h>
  65. #include <kvm.h>
  66. #define X_AVENRUN 0
  67. long avenrun[3];
  68. kvm_t * kd;
  69. struct nlist nl[] = { {LOADSYMBOL}, {""}, };
  70.  
  71. int getload()
  72. {
  73.   if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, NULL)) == NULL) 
  74.     return(-1);
  75.   if (kvm_nlist(kd, nl) != 0) 
  76.     return(-1);
  77.   if(nl[X_AVENRUN].n_type == 0) 
  78.     return(-1);
  79.   if(kvm_read(kd,nl[X_AVENRUN].n_value,avenrun,sizeof(avenrun)) 
  80.      != sizeof(avenrun)) 
  81.     return(-1);
  82.   if((sysload = (((double) avenrun[WHICHLOAD]) / FSCALE)) > maxload) {
  83.     if(DEBUG)
  84.       printf("System maxload %f exceeded (currently %f)\n",maxload,sysload);
  85.     return(1);
  86.   }
  87.   return(0);
  88. }
  89. #endif /* LOADRESTRICT */     
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.